package com.wang.java.basic.framework.queue.blockingqueue;

import java.util.concurrent.SynchronousQueue;

/**
 * 同步阻塞队列，无缓存队列
 * 数据结构：基于TransferQueue、TransferStack实现
 * 线程安全：是，基于CAS实现
 * 队列长度：不存储数据，必须同时有消费者和生产者，直接将生产者的数据给消费者
 * 阻塞性：阻塞
 */
public class SynchronousQueueTest {
    public static void main(String[] args) throws InterruptedException {
        SynchronousQueue<String> synchronousQueue = new SynchronousQueue<>(true);
        // 消费
        new Thread(() -> {
            String str;
            try {
                while ((str = synchronousQueue.take()) != null) {
                    System.out.println(str);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
        // 生产
        for (int i = 0; i < 10; i++) {
            synchronousQueue.put(i + "");
        }
    }
}
